class TypeDefinition:
    def __init__(self, lineNumber, name, isUserDefined, argList):
        self.lineNumber = lineNumber
        self.name = name
        self.isUserDefined = isUserDefined
        self.argList = argList
    
class ConstDefinition:
    def __init__(self, lineNumber, typeDefinition, name, valueString):
        self.lineNumber = lineNumber
        self.typeDefinition = typeDefinition
        self.name = name
        self.valueString = valueString

    
class EnumNameDefinition:
    def __init__(self, lineNumber, name, valueString):
        self.lineNumber = lineNumber
        self.name = name
        self.valueString = valueString

    
class EnumDefinition:
    def __init__(self, lineNumber, name, nameDefinitions):
        self.lineNumber = lineNumber
        self.name = name
        self.nameDefinitions = nameDefinitions

    
class DefaultValue():
    def __init__(self, lineNumber, valueString, name):
        self.lineNumber = lineNumber
        self.valueString = valueString
        self.name = name
        self.isConstValue = True
        if self.name:
            self.valueString = None
            self.isConstValue = False

    
class StructFieldDefinition:
    def __init__(self, lineNumber, typeDefinition, name, defaultValue):
        self.lineNumber = lineNumber
        self.typeDefinition = typeDefinition
        self.name = name
        self.defaultValue = defaultValue

    
class StructDefinition:
    def __init__(self, lineNumber, name, filedDefinitions):
        self.lineNumber = lineNumber
        self.name = name
        self.filedDefinitions = filedDefinitions
